#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QStackedWidget>
#include <QWidget>
#include <QPushButton>
#include <QGridLayout>
#include <QVBoxLayout>
#include <QLabel>
#include <QTimer>
#include <QTime>

// 引入功能模块
#include "ui/serial/serialwidget.h"
#include "ui/mqtt/mqttwidget.h"
#include "ui/video/videoplayerwidget.h"

/**
 * @brief 主窗口类
 * 
 * 功能：
 * 1. 图标网格布局，展示所有功能模块入口
 * 2. 使用QStackedWidget管理页面切换
 * 3. 提供返回按钮
 * 4. 显示系统状态信息（CPU、内存、时间）
 * 5. 支持壁纸/主题切换
 */
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    // UI初始化
    void setupUI();
    void createIconGrid();
    void createStatusBar();
    void loadStyleSheet(int themeIndex);
    void applyDefaultStyle();
    
    // 创建图标按钮
    QPushButton* createIconButton(const QString &iconPath, const QString &text);
    
    // 系统信息获取
    void updateSystemInfo();
    float getCpuUsage();
    void getMemoryInfo(int &totalMB, int &usedMB);
    
private slots:
    // 图标点击槽函数
    void onSerialClicked();
    void onNetworkClicked();
    void onMqttClicked();
    void onVideoClicked();
    void onMusicClicked();
    void onWeatherClicked();
    void onCameraClicked();
    void onGalleryClicked();
    void onOpenCVClicked();
    void onPaintClicked();
    void onWallpaperClicked();
    void onSettingsClicked();
    
    // 返回主界面
    void onBackToHome();
    
    // 系统信息更新槽
    void onUpdateSystemInfo();

private:
    // 主要组件
    QStackedWidget *m_stackedWidget;    // 堆栈窗口，管理页面切换
    QWidget *m_homeWidget;              // 主页（图标网格）
    QPushButton *m_backButton;          // 返回按钮
    
    // 状态栏组件
    QLabel *m_statusLabel;              // 状态信息标签
    QTimer *m_systemTimer;              // 系统信息更新定时器
    
    // 功能模块Widget
    SerialWidget *m_serialWidget;       // 串口助手界面
    QWidget *m_networkWidget;           // 网络助手界面
    MqttWidget *m_mqttWidget;           // MQTT测试界面
    VideoPlayerWidget *m_videoWidget;   // 视频播放界面
    QWidget *m_musicWidget;             // 音乐播放界面
    QWidget *m_weatherWidget;           // 天气预报界面
    QWidget *m_cameraWidget;            // 照相机界面
    QWidget *m_galleryWidget;           // 相册界面
    QWidget *m_opencvWidget;            // OpenCV检测界面
    QWidget *m_paintWidget;             // 画图工具界面
    QWidget *m_settingsWidget;          // 设置界面
    
    // 主题管理
    int m_currentTheme;                 // 当前主题索引（0或1）
    
    // CPU使用率计算用
    unsigned long long m_lastTotalTime; 
    unsigned long long m_lastIdleTime;
};

#endif // MAINWINDOW_H

